﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using FrbaBus.Core;

namespace FrbaBus.Abm_Micro
{
    public partial class AltaMicro : Form
    {
       
        public AltaMicro()
        {
            InitializeComponent();
        }

        public BajaMicro parent = null;
        public string patente;
        public string butacas;
        public bool especificarButacas = false;
        private int fechasalida;
       
        public AltaMicro(Form callingForm)
        {
            parent = callingForm as BajaMicro;

            InitializeComponent();
        }



        bool picked = false;
        DateTime fechaBajaDef;
        string fechaBajaDefinitiva;

        bool crear=false;
        private void AltaMicro_Load(object sender, EventArgs e)
        {

            
            DBManager db = new DBManager();
            if (parent != null)
            {
                label8.Visible = true;

                SqlCommand consultaz = new SqlCommand("select count(*) from ALL_IN.butaca where patente=@Patente");
                consultaz.Parameters.Add("@Patente", SqlDbType.NVarChar)
                .Value = String.Copy(parent.OldPatente);
                SQLResponse rz = db.executeQuery(consultaz);
                int valorz = (int)rz.result.Rows[0][0];
                this.numericUpDown2.Minimum = valorz;
                dateTimePicker1.Visible = false;
                button2.Visible = false;
                button4.Visible = false;
                textBox2.ReadOnly = true;
                textBox2.Visible = true;
                SqlCommand consultaFechaActual = new SqlCommand("select year(ALL_IN.Fecha_Actual.Fecha),month(ALL_IN.Fecha_Actual.Fecha),day(ALL_IN.Fecha_Actual.Fecha),DATEPART(hh,ALL_IN.Fecha_Actual.Fecha)  from ALL_IN.Fecha_Actual");
                SQLResponse rFechaActual = db.executeQuery(consultaFechaActual);
                string hora = rFechaActual.result.Rows[0][3].ToString();
                string mes = rFechaActual.result.Rows[0][1].ToString();
                string dia = rFechaActual.result.Rows[0][2].ToString();
                if (int.Parse(hora) < 9) //Hora-3
                {
                    hora = "0" + hora;
                }
                if (int.Parse(dia) < 9) //Dia-2
                {
                    dia = "0" + dia;
                }
                if (int.Parse(mes) < 9) //Mes-1
                {
                    mes = "0" + mes;
                }
                textBox2.Text = rFechaActual.result.Rows[0][0].ToString() + "-" + mes + "-" + dia + " " + hora + ":00:00";
                fechasalida = int.Parse(rFechaActual.result.Rows[0][0].ToString() + mes + dia + hora);
                SqlCommand consultax = new SqlCommand("select Tipo_Servicio,Cantidad_Kg,Marca from ALL_IN.MicrosMarca where patente=@Patente");
                consultax.Parameters.Add("@Patente", SqlDbType.NVarChar)
                .Value = String.Copy(parent.OldPatente);
                SQLResponse rx = db.executeQuery(consultax);
                SqlCommand consultay = new SqlCommand("select @@rowcount");
                SQLResponse ry = db.executeQuery(consultay);
                int lineas = Convert.ToInt32(ry.result.Rows[0][0].ToString());
                if (lineas > 0)
                {
                string tipoServicio = rx.result.Rows[0][0].ToString();
                int cantKg = Convert.ToInt32(rx.result.Rows[0][1].ToString());
                string Marca = rx.result.Rows[0][2].ToString();

                comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
                comboBox1.Text = tipoServicio;
                comboBox1.Enabled = false;
                comboBox2.DropDownStyle = ComboBoxStyle.DropDown;
                comboBox2.Text = Marca;
                comboBox2.Enabled = false;
                this.numericUpDown1.Minimum = cantKg;
                this.numericUpDown2.Enabled = false;
                this.numericUpDown2.ReadOnly = true;
                }

            }
            // LLENO EL COMBOBOX3 con los MODELOS

            
          

            SqlCommand consulta = new SqlCommand("select Distinct Modelo from ALL_IN.MicrosMarca");
            SQLResponse r = db.executeQuery(consulta);
            SqlCommand consulta2 = new SqlCommand("select count (distinct Modelo) from ALL_IN.MicrosMarca");
            SQLResponse r2 = db.executeQuery(consulta2);
            int valor = (int)r2.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                comboBox3.Items.Add(r.result.Rows[i][0].ToString());
            }
            // LLENO EL COMBOBOX1 con los MODELOS
            SqlCommand consulta3 = new SqlCommand("select Tipo_Servicio from ALL_IN.Tipo_Servicio");
            SQLResponse r3 = db.executeQuery(consulta3);
            SqlCommand consulta4 = new SqlCommand("select count (*) from ALL_IN.Tipo_Servicio");
            SQLResponse r4 = db.executeQuery(consulta4);
            valor = (int)r4.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                comboBox1.Items.Add(r3.result.Rows[i][0].ToString());
            }


            SqlCommand consulta5 = new SqlCommand("select Distinct Marca from ALL_IN.Marca");
            SQLResponse r5 = db.executeQuery(consulta5);
            SqlCommand consulta6 = new SqlCommand("select count (Distinct Marca) from ALL_IN.Marca");
            SQLResponse r6 = db.executeQuery(consulta6);
            valor = (int)r6.result.Rows[0][0];
            for (int i = 0; i < valor; i++)
            {
                comboBox2.Items.Add(r5.result.Rows[i][0].ToString());
            }

            db.desconectar();        
        }
        //-----------------------------------------------------------------------------------

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == ' ')
            {
                MessageBox.Show("No se admiten espacios");
                e.Handled = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            //--------------------------------------------------------
            //CHEQUEOS PATENTE
            //--------------------------------------------------------
            string text;
            bool aux=false;
            bool aux2=false;
            text = textBox1.Text;
            char[] arr = text.ToCharArray(0, text.Length);

            // Convert the string into a byte[].
            byte[] asciiBytes = Encoding.ASCII.GetBytes(text);


            //VERIFICAR QUE EL CAMPO PATENTE ESTA COMPLETO
            if (text.Length < 7)
            {
                MessageBox.Show("FALTAN CARACTERES EN EL CAMPO PATENTE");
            }
            else
            {
                //CHEQUEO DEL CAMPO PATENTE
                for (int i = 0; i < 3; i++)
                {
                    //QUE LAS PRIMERAS 3 POSICIONES SEAN LETRAS de la A..Z, la 4ta posicion -
                    if ((asciiBytes[i] >= 65 && asciiBytes[i] <= 90) && (asciiBytes[3] == '-'))
                    {
                        aux = true;
                    }
                    else
                    {
                        MessageBox.Show("LA SINTAXIS DE UNA PATENTE ES ABC-123");
                        i = 6;
                        aux = false;
                    }

                }
                if (aux == true)
                {
                    for (int k = 4; k < 7; k++)
                    {
                        //QUE LAS ULTIMAS 3 POSICIONES SEAN NUMEROS
                        if (asciiBytes[k] == '1' || asciiBytes[k] == '2' || asciiBytes[k] == '3' || asciiBytes[k] == '4' || asciiBytes[k] == '5' || asciiBytes[k] == '6' || asciiBytes[k] == '7' || asciiBytes[k] == '8' || asciiBytes[k] == '9' || asciiBytes[k] == '0')
                        {
                            aux2 = true;
                        }
                        else
                        {
                            MessageBox.Show("LA SINTAXIS DE UNA PATENTE ES ABC-123");
                            k = 7;
                            aux2 = false;
                        }


                    }
                }
                if (aux2 == true)
                {
                    //FIJATE SI NO EXISTE ESA PATENTE
                    DBManager db = new DBManager();
                    SqlCommand consulta = new SqlCommand("SELECT ALL_IN.existePatente('" + textBox1.Text + "')");
                    SQLResponse r = db.executeQuery(consulta);
                    bool valor2 = (bool)r.result.Rows[0][0];
                    if (valor2 == true)
                    {
                        MessageBox.Show("EXISTE UN MICRO CON ESA PATENTE");
                    }
                    else
                    {
                        //chequear que la fechaAlta sea valida
                            if (textBox2.Enabled == true && this.parent == null)
                            {
                                if (picked == false)
                                    MessageBox.Show("Por favor haga click en el desplegable de Fecha Alta y de click en el dia");
                                else
                                MessageBox.Show("Clickea en OK al lado de fecha");
                            }
                        else
                        {
                            
                                crear = comboBox1.Text != "" && comboBox2.Text != "" && comboBox3.Text != "";
                            
                            if (crear == false)
                            {
                                MessageBox.Show("HAY CAMPOS SIN COMPLETAR");
                                button2.Visible = true;
                            }
                            else
                            {
                                
                                //verificar tipo de dato modelo, marca
                                string patente = textBox1.Text;

                                DateTime dia = dateTimePicker1.Value;



                                string fechaAlta = dia.ToString("yyyy-MM-dd hh:mm:ss.sss");

                                string modelo = comboBox3.Text;
                                string marca = comboBox2.Text;
                                string tipoServicio = comboBox1.Text;
                                string cantKg = numericUpDown1.Text;
                                string cantButacas = numericUpDown2.Text;
                                SqlCommand existemarca = new SqlCommand("select ALL_IN.existeMarca ('" + marca + "')");
                                SQLResponse IDmarca = db.executeQuery(existemarca);
                                if (IDmarca.result.Rows[0][0].ToString() == "False")
                                {
                                    SqlCommand consulta9 = new SqlCommand("insert ALL_IN.Marca(marca) values('" + marca + "')");
                                    db.executeQuery(consulta9);
                                }
                                SqlCommand MarcaID = new SqlCommand("select ID_Marca from ALL_IN.Marca where Marca='" + marca + "'");
                                SQLResponse r10 = db.executeQuery(MarcaID);

                                if (parent != null)
                                {

                                    fechaAlta = string.Copy(textBox2.Text);
                                    DateTime dia2 =  Convert.ToDateTime(textBox2.Text);
                                    fechaBajaDef = dia2.AddYears(10);
                                    string registro = dia2.ToString("yyyy-MM-dd hh:mm:ss.sss");
                                    fechaBajaDefinitiva = fechaBajaDef.ToString("yyyy-MM-dd hh:mm:ss.sss") + 0;
                                    
                                }


                                
                                    SqlCommand insercion = new SqlCommand("INSERT into ALL_IN.Micros (Patente, Fecha_Alta, modelo, marca, Tipo_Servicio, cantidad_Kg, Fecha_Baja_Definitiva) Values('" + patente + "','" + fechaAlta +
                                        "','" + modelo +
                                        "','" + r10.result.Rows[0][0].ToString() +
                                        "','" + tipoServicio +
                                        "','" + cantKg +
                                        "','" + fechaBajaDefinitiva +
                                        "')");
                                    db.executeQuery(insercion);

                                    if (especificarButacas == false && parent == null)
                                    {
                                    
                                        SqlCommand consultaX = new SqlCommand("exec ALL_IN.altaButacasMicro @patente = '" + patente + "', @cantButacas= '" + cantButacas + "'");
                                        db.executeQuery(consultaX);
                                        db.desconectar();
                                    }
                                    else if (especificarButacas == true)
                                    {
                                        string butacas2 = butacas.Replace("(", "('" + textBox1.Text + "',");
                                        //utilizar el string del hijo para el alta de las butacas
                                        //el nombre de la variable es s1
                                        SqlCommand consultaX = new SqlCommand(" insert into ALL_IN.Butaca(Patente,ID_Butaca,Tipo_Butaca,Piso) values"
                                            + butacas2);
                                        db.executeQuery(consultaX);
                                        db.desconectar();
                                    }
                                    else
                                    {
                                        // COPIAR BUTACAS DEL MICRO QUE SE DA DE BAJA


                                        SqlCommand consultaX = new SqlCommand("Insert into ALL_IN.Butaca(Patente,ID_Butaca,Tipo_Butaca,Piso) " +
                                            " Select '" + textBox1.Text + "',b.ID_Butaca,b.Tipo_Butaca,b.Piso from ALL_IN.Butaca b where Patente='"
                                            + parent.OldPatente + "'");
                                        db.executeQuery(consultaX);
                                        db.desconectar();

                                    }



                                MessageBox.Show("Se creo el micro " + textBox1.Text + " exitosamente!");
                                textBox1.Text = "";
                                if (parent != null)
                                {
                                    parent.PatenteNueva = string.Copy(patente);
                                    
                                }
                                this.Close();

                            }
                        }

                    }
                }
                else
                {
                    crear = true;

                }

            }
            //--------------------------------------------------------
            //FIN CHEQUEOS PATENTE
            //--------------------------------------------------------



        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {

            DateTime dia = dateTimePicker1.Value;
            fechaBajaDef = dia.AddYears(10);
            string registro = dia.ToString("yyyy-MM-dd hh:mm:ss.sss");
            dateTimePicker1.Visible = false;
            textBox2.Text = registro;
            textBox2.Visible = true;
            button2.Visible = true;
            button3.Visible = true;
            fechaBajaDefinitiva = fechaBajaDef.ToString("yyyy-MM-dd hh:mm:ss.sss") + 0;
            picked = true;
          
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // VERIFICAR QUE LA FECHA SEA VALIDA
            string mascara;
            mascara = textBox2.Text + '0';
            textBox2.Text = mascara;
            textBox2.Enabled = false;
            button2.Enabled = false;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            dateTimePicker1.Visible = true;
            textBox2.Visible = false;
            button2.Visible = false;
            button2.Enabled = true;
            button3.Visible = false;
            textBox2.Enabled = true;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            
            Abm_Micro.Distribucion_de_Butacas frm = new Abm_Micro.Distribucion_de_Butacas(this,true);
            frm.ShowDialog(this);
            numericUpDown2.ReadOnly = true;
            numericUpDown2.Enabled = false;
        }


    }
}
